<template>
  <label>
    {{label}}
    <input v-bind="$attrs" :value="value" v-on="inputListeners" />
  </label>
</template>

<script>
export default {
  inheritAttrs: false,
  props: ["label", "value"],
  computed: {
    inputListeners() {
      // `Object.assign` 将所有的对象合并为一个新对象
      // 我们从父级添加所有的监听器
      // 然后我们添加自定义监听器，
      // 或覆写一些监听器的行为, 这里确保组件配合 `v-model` 的工作
      return Object.assign({}, this.$listeners, {
        input(event) {
          this.$emit("input", event.target.value);
        }
      });
    }
  }
};
</script>